package com.zed.api.domain.repository;

import reactor.core.publisher.Mono;

import java.util.Collection;
import java.util.List;

/**
 * 查询资源库
 *
 * @author Zed
 */
public interface QueryRepository<P, T> {

    /**
     * 按主键查找对象
     *
     * @param id {@link P}
     * @return {@link T}
     */
    T findById(P id);

    /**
     * 按主键查找对象
     *
     * @param id {@link P}
     * @return {@link Mono},如果为null则返回Mono.empty()
     */
    default Mono<T> findByIdWithMono(P id) {
        try {
            return Mono.justOrEmpty(this.findById(id));
        } catch (Exception e) {
            return Mono.error(e);
        }
    }

    /**
     * 按主键集合查询一堆集合
     *
     * @param ids {@link Collection},集合
     * @return {@link List},可能与实际获取的结果不一致
     */
    List<T> getByIds(Collection<P> ids);
}
